﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using vudu.Logica.Clases;

namespace vudu.PaginasWeb.G2Horario
{
    public partial class selectPracticasPreMatricula : System.Web.UI.Page
    {
        #region Atributos

            private Estudiante _estudianteActual;
            private TableCell _newCell;
            private TableRow _newRow;
            private RadioButtonList _misRadioSecciones;
            private Practica _miSeccionPracticaSeleccionada;
            private List<SeccionMateria> _misSeccionesSeleccionadas;
            private List<SeccionMateria> _misSeccionesSeleccionadasAux;
            private List<Practica> _misSeccionesPracticasSeleccionadas;
            private int _counter;
            private int _counterPracticas;
            private int _counterSelected;
            private string _minuteIni;
            private string _minuteFin;

        #endregion FinAtributos

        #region Metodos

            protected void InitSecure()
            {
                string miRol = (string)Session["rol"];
                if (miRol != "Estudiante")
                    Response.Redirect("../G3AccesoSistema/InicioSistema.aspx");

                //Session["rol"] = "";
                _estudianteActual = new Estudiante();
                _estudianteActual = (Estudiante)Session["usuario"];

                if (_estudianteActual.ExistPreMatriculaActiva())
                {
                    Response.Write("<script language=\"javascript\">alert('Ya usted no puede registrar mas PreMatriculas')</script>" +
                                    "<script language=\"javascript\">window.location='indexPreMatricula.aspx'</script>");
                }
                if (_estudianteActual.SecuenceCounter != 3)
                    Response.Redirect("indexPreMatricula.aspx");
            }

            protected void InitComponents()
            {
                labelEstudiante.Text = _estudianteActual.Nombre + "&nbsp;" + _estudianteActual.Apellido;
                _miSeccionPracticaSeleccionada = new Practica();
                _misSeccionesSeleccionadas = new List<SeccionMateria>();
                _misSeccionesPracticasSeleccionadas = new List<Practica>();
                _misSeccionesSeleccionadas = _estudianteActual.ListaPracticasMateria();
                _counterSelected = 0;
            }

            protected void RowsLoad(Practica miPracticaPorSeccion)
            {
                ListItem miSeccion = new ListItem();
                if (_estudianteActual.PreMatriculaModificable.Codigo != 0)
                {
                    foreach (SeccionMateria mySection in _estudianteActual.PreMatriculaModificable.ListaSecciones)
                    {
                        if (mySection.ListaPractica != null)
                        {
                            foreach (Practica myPractice in mySection.ListaPractica)
                            {
                                if (myPractice.IdPractica == miPracticaPorSeccion.IdPractica)
                                {
                                    miSeccion.Selected = true;
                                }
                            }
                        }
                    }
                }
                miSeccion.Value = miPracticaPorSeccion.IdPractica.ToString();
                miSeccion.Text = "Seccion " + miPracticaPorSeccion.NumeroSeccion.ToString() +
                                    "&nbsp;<b>(" + miPracticaPorSeccion.NombrePractica +
                                    ")</b><br/>Profesor:&nbsp;" + miPracticaPorSeccion.profesor.Nombre +
                                    "&nbsp;" + miPracticaPorSeccion.profesor.Apellido;
                foreach (HorarioDeClase horarioClase in miPracticaPorSeccion.horarioDeClase)
                {
                    if (horarioClase.HoraInicio.Minute.ToString().Length < 2)
                        _minuteIni = "0" + horarioClase.HoraInicio.Minute.ToString();
                    else
                        _minuteIni = horarioClase.HoraInicio.Minute.ToString();
                    if (horarioClase.HoraFin.Minute.ToString().Length < 2)
                        _minuteFin = "0" + horarioClase.HoraFin.Minute.ToString();
                    else
                        _minuteFin = horarioClase.HoraFin.Minute.ToString();
                    miSeccion.Text += "&nbsp&nbsp&nbsp-&nbsp;" + horarioClase.Dia +
                                        ": " + horarioClase.HoraInicio.Hour.ToString() + ":" + _minuteIni +
                                        " a " + horarioClase.HoraFin.Hour.ToString() + ":" + _minuteFin + "<br/>";
                }
                miSeccion.Text += "<br/>";
                _misRadioSecciones.Items.Add(miSeccion);
            }

            protected void TableLoad()
            {
                _counter = 0;
                List<SeccionMateria> misSeccionesPorMateria = new List<SeccionMateria>();

                foreach (SeccionMateria miSeccionSeleccionada in _misSeccionesSeleccionadas)
                {
                
                    if (miSeccionSeleccionada.ListaPractica.Count != 0)
                    {
                        _newRow = new TableRow();
                        _newCell = new TableCell();
                        _misRadioSecciones = new RadioButtonList();

                        tableListSecciones.Rows.Add(_newRow);
                        _newCell.BorderWidth = 1;
                        _newRow.Cells.Add(_newCell);
                        _counter++;
                        _counterPracticas = 1;
                        foreach (Practica miPracticaPorSeccion in miSeccionSeleccionada.ListaPractica)
                        {
                            RowsLoad(miPracticaPorSeccion);
                        }
                        _newCell.Controls.Add(_misRadioSecciones);
                    }
                }
            }

            protected void GenerarSeccionesPracticas(int idPractica)
            {
                foreach (SeccionMateria miSeccionSeleccionadaAux in _misSeccionesSeleccionadas)
                {
                    if (_estudianteActual.ExistPractica(idPractica, miSeccionSeleccionadaAux.ListaPractica))
                    {
                        miSeccionSeleccionadaAux.ListaPractica.RemoveAll(
                        delegate(Practica myPractice) 
                        { 
                            return myPractice.IdPractica != idPractica; 
                        });
                        if (miSeccionSeleccionadaAux.ListaPractica.Count > 1)
                            miSeccionSeleccionadaAux.ListaPractica.RemoveAt(1);
                    }
                }
            }

            protected void selectAlmostOne()
            {
                foreach (TableRow myRows in tableListSecciones.Rows)
                {
                    foreach (TableCell myCells in myRows.Cells)
                    {
                        foreach (RadioButtonList myControl in myCells.Controls)
                        {
                            foreach (ListItem myRadioItem in myControl.Items)
                            {
                                if (myRadioItem.Selected)
                                {
                                    _counterSelected++;
                                }
                            }
                            if (_counterSelected == 0)
                            {
                                myControl.Items[0].Selected = true;
                            }
                            else
                            {
                                _counterSelected = 0;
                            }
                        }
                    }
                }
            }

            protected void Page_Load(object sender, EventArgs e)
            {
                InitSecure();
                if ((_estudianteActual.PreMatriculaModificable.Codigo != 0) &&
                    (_estudianteActual.PageCounter == 3))
                {
                    labelMigaActual.Text = "Modificar PreMatricula";
                }
                else
                {
                    _estudianteActual.PageCounter = 0;
                    _estudianteActual.PreMatriculaModificable = new HorarioPreMatricula();
                    labelMigaActual.Text = "Agregar PreMatricula";
                }
                labelTitulo.Text = labelMigaActual.Text + "<br /><br /><br /><br />";
                InitComponents();
                TableLoad();
                if (_counter == 0)
                {
                    labelNoPracticas.Text = "Las secciones teóricas que selecciono, no tienen práctica";
                }
                selectAlmostOne();
            }

            protected void btnNextPracticasSelected_Click(object sender, EventArgs e)
            {
                foreach (TableRow myRows in tableListSecciones.Rows)
                {
                    foreach (TableCell myCells in myRows.Cells)
                    {
                        foreach (RadioButtonList myControl in myCells.Controls)
                        {
                            foreach (ListItem myRadioItem in myControl.Items)
                            {
                                if (myRadioItem.Selected)
                                {
                                    GenerarSeccionesPracticas(Int32.Parse(myRadioItem.Value));
                                    //_miSeccionPracticaSeleccionada = new Practica();
                                    //_miSeccionPracticaSeleccionada.IdPractica = Int32.Parse(myRadioItem.Value);
                                    //_misSeccionesPracticasSeleccionadas.Add(_miSeccionPracticaSeleccionada);
                                }
                            }
                        }
                    }
                }
                _estudianteActual.MisSeccionesSeleccionadasPreMatricula = _misSeccionesSeleccionadas;
                Session["rol"] = "Estudiante";
                _estudianteActual.PageCounter++;
                _estudianteActual.SecuenceCounter = 4;
                Response.Redirect("addNombreHorarioPreMatricula.aspx");
            }

            protected void btnBackPracticasSelected_Click(object sender, EventArgs e)
            {
                Session["rol"] = "Estudiante";
                _estudianteActual.PageCounter--;
                _estudianteActual.SecuenceCounter = 2;
                Response.Redirect("selectHorariosPreMatricula.aspx");
                
            }

        #endregion FinMetodos

    }
}